Greenplum 从入门到放弃(四)

PostgreSQL与Greenplum的关系

PostgreSQL

PostgreSQL是一种非常先进的对象–关系型数据库管理系统(ORDBMS),是目前功能最强大,特性最丰富和技术最先进的自由软件数据库系统之一,其某些特性甚至连商业数据库都不具备。

PostgreSQL的特点可以说是数不胜数,称其为最先进的开
源软件数据库当之无愧,支持绝大部分的主流数据库特性,主
要体现在如下几方面:

  1. 函数/存储过程

PostgreSQL对非常丰富的过程类语言提供支持,可以编写自定义函数/存储过程

  • 内置的plpgsql,一种类似Oracle的PLsql的语言
  • 支持的脚本语言有:PL/Lua、PL/LOLCODE、PL/Perl、PL/HP、PL/Python、PL/Ruby、PL/sh、PL/Tcl和PL/Scheme。、
  • 编译语言有C、C++和JAVA。
  • ·统计语言PL/R
  1. 索引

PostgreSQL支持用户定义的索引访问方法,并且内置了Btree、哈希和GiST索引。PostgreSQL中的索引有下面几个特点:

  • 可以从后向前扫描
  • 可以创建表达式索引
  • 部分索引
  1. 触发器

触发器是由SQL查询的动作触发的事件。比如,一个INSERT查询可能激活一个检查输入值是否有效的触发器。大多数触发器都只对INSERT或者UPDATE查询有效。PostgreSQL完全支持触发器,可以附着在表上,但是不能在视图上。不过视图可以有规则。多个触发器是按照字母顺序触发的。我们还可以用其他过程语言书写触发器函数,不仅仅PL/PgSQL。

  1. 并发管理(MVCC)

PostgreSQL的并发管理使用的是一种叫做“MVCC”(多版本并发机制)的机制,这种机制实际上就是现在在众多所谓的编程语言中极其火爆的“Lock Free”,其本质是通过类似科幻世界的时空穿梭的原理,给予每个用户一个自己的“时空”
,然后通过原子的“时空”控制来控制时间基线,并以此控制并发更改的可见区域,从而实现近乎无锁的并发,而同时还能在很大程度上保证数据库的ACID特性。

  1. 规则(RULE)

规则允许我们对由一个查询生成的查询树进行改写。

  1. 数据类型

PostgreSQL支持非常广泛的数据类型,包括:

  • 任意精度的数值类型;
  • 无限长度的文本类型;
  • 几何原语;
  • IPv4和IPv6类型;
  • CIDR块和MAC地址;
  • 数组。

用户还可以创建自己的类型,并且可以利用GiST框架把这些类型做成完全可索引的,比如来自PostGIS的地理信息系统(GIS)的数据类型。

  1. 用户定义对象

因为PostgreSQL使用一种基于系统表的可扩展的结构设计,所以PostgreSQL内部的几乎所有对象都可以由用户定义,这些对象包括:

  • 索引;
  • 操作符(内部操作符可以被覆盖);
  • 聚集函数;
  • 域;
  • 类型转换;
  • 编码转换。
  1. 继承

PostgreSQL的表是可以相互继承的。一个表可以有父表,
父表的结构变化会导致子表的结构变化,而对子表的插入和数
据更新等也会反映到父表中。

  1. 其他特性与扩展
  • 二进制和文本大对象存储;
  • 在线备份;
  • TOAST(The Oversized-Attribute Storage Technique)用于透明地在独立的地方保存大的数据库属性,当数据超过一定大小的时候,会自动进行压缩以节省空间;
  • 正则表达式。

此外PostgreSQL还有大量的附加模块和扩展版本,比如,多种不同的主从/主主复制方案:

  • Slony-I;
  • pgcluster;
  • Mammoth replicator;
  • Bucardo。